//计算
#include <iostream>
#include <stack>
#include <cstring>
#include <cmath>
using namespace std;
char expr[256];
int priority[256];
stack<int> num_st;
stack<char> op_st;
int main(){
    priority['(']=10;
    priority['^']=9;
    priority['*']=8;
    priority['/']=8;
    priority['+']=4;
    priority['-']=4;
    priority[')']=1;
    priority['@']=1;
    cin>>expr;
    int l=strlen(expr);
    expr[l++]='@';
    int s=0;
    int sign=1;
    for(int i=0;i<l;i++){
        char c=expr[i];
        //处理数字 
        if (c>='0'&&c<='9') {
            s=s*10+c-'0';
            if (expr[i+1]<'0'||expr[i+1]>'9') {
                s=s*sign;
                num_st.push(s);
                s=0;
                sign=1;
            }
            continue;
        }
        //处理负号
        if (c=='-'&&(i==0||expr[i-1]=='(')) {
            sign=-1;
            continue;
        }
        //处理操作符
        while(!op_st.empty()){ //当操作符栈不为空
            
            char last_op=op_st.top();
            if (last_op=='('&&c==')') { //检查是否（）匹配，是则一起去掉
                op_st.pop();
                break;
            }

            if (priority[c]>priority[last_op]||last_op=='(') {//当前操作符的优先级大于栈顶操作符的优先级
                                                                //或者栈顶操作符为'('时，将当前操作符入栈
                op_st.push(c);
                break;
            } 
            //否则进行栈顶操作符的运算
            int b=num_st.top();num_st.pop();
            int a=num_st.top();num_st.pop();
            int r=0;
            switch (last_op)
            {
                case '^':
                    r=pow(a,b);
                    break;
                case '*':
                    r=a*b;
                    break;
                case '/':
                    r=a/b;
                    break;
                case '+':
                    r=a+b;
                    break;
                case '-':
                    r=a-b;
                    break;
            }
            num_st.push(r);
            //cout<<a<<last_op<<b<<'='<<r<<endl;
            op_st.pop();
        }
        if (op_st.empty()){//当操作符栈为空，将当前操作符入栈，除了‘）’和‘@’
            if (c!=')'&&c!='@') op_st.push(c);
        }
    }
    cout<<num_st.top();
}